package dao

import (
	"errors"
	"src/conf/database"
	"src/entity"
)

// InsertUser 将用户数据插入到数据库中，并返回错误信息（如果有）
func InsertUser(u *entity.User) error {
	// 初始化数据库连接
	db := database.InitDatabase()
	defer func() {
		if conn, err := db.DB(); err == nil {
			conn.Close()
		}
	}()

	// 执行插入操作
	if err := db.Create(u).Error; err != nil {
		// 如果发生错误，则返回错误信息
		return err
	}

	// 成功插入数据时返回 nil 错误
	return nil
}

func GetUser() []entity.User {
	db := database.InitDatabase()
	var list []entity.User
	db.Raw("SELECT * FROM user ").Scan(&list)
	colse, _ := db.DB()
	defer colse.Close()
	return list
}

func GetUserByWalletAddress(address string) entity.User {
	db := database.InitDatabase()
	var user entity.User
	db.Raw("SELECT * FROM user WHERE wallet_address = ?", address).Scan(&user)
	colse, _ := db.DB()
	defer colse.Close()
	return user
}

// UpdateUser 更新用户信息
func UpdateUser(e *entity.User) error {
	// 初始化数据库连接
	db := database.InitDatabase()
	defer func() {
		if dbConn, err := db.DB(); err == nil {
			_ = dbConn.Close()
		}
	}()

	// 确保用户 ID 存在
	if e.ID == 0 {
		return errors.New("user ID is required")
	}

	// 使用 GORM 更新记录
	result := db.Model(&entity.User{}).Where("id = ?", e.ID).Updates(e)

	// 处理更新结果
	if result.Error != nil {
		return result.Error
	}

	// 检查更新的记录是否为零条，表示 ID 不存在
	if result.RowsAffected == 0 {
		return errors.New("no rows affected, user ID might not exist")
	}

	return nil
}
